﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TVH.Entidade;
using System.Transactions;
using TVH.Persistencia;

namespace TVH.Negocio
{
    public class NegSetor : BaseNegocio<Persistencia.PerSetor, Setor>
    {
        public override List<Setor> ObterLista(Setor filtro)
        {
            PerSetorCategoria perSetorCategoria = new PerSetorCategoria();

            var lista = base.ObterLista(filtro);
            lista.ForEach(x => x.Categorias = perSetorCategoria.ObterLista(new SetorCategoria() { CodSetor = x.Id.Value }).Select(y => new CategoriaProduto()
            {
                Descricao = y.DescricaoCategoria,
                Id = y.CodCategoria
            }).ToList());
            return lista;
        }

        public override void Excluir(Setor registro)
        {
            using (TransactionScope ts = new TransactionScope())
            {
                ExcluirSetorCategoria(registro);
                base.Excluir(registro);
                ts.Complete();

            }
        }

        public override void Alterar(Setor registro)
        {

            using (TransactionScope ts = new TransactionScope())
            {
                base.Alterar(registro);
                SalvarSetorCategoria(registro);
                ts.Complete();
            }
        }

        public override void Inserir(Setor registro)
        {
            var perSetorCategoria = new Persistencia.PerSetorCategoria();
            using (TransactionScope ts = new TransactionScope())
            {
                base.Inserir(registro);
                SalvarSetorCategoria(registro);
                ts.Complete();
            }
        }

        private static void SalvarSetorCategoria(Setor registro)
        {
            var perSetorCategoria = new Persistencia.PerSetorCategoria();
            ExcluirSetorCategoria(registro);
            foreach (var item in registro.Categorias)
            {
                perSetorCategoria.Inserir(new SetorCategoria()
                {
                    CodCategoria = item.Id,
                    CodSetor = registro.Id.Value
                });
            }
        }

        private static void ExcluirSetorCategoria(Setor registro)
        {
            var perSetorCategoria = new Persistencia.PerSetorCategoria();
            foreach (var item in perSetorCategoria.ObterLista(new SetorCategoria()
            {
                CodSetor = registro.Id.Value
            }))
            {
                perSetorCategoria.Excluir(item);
            }
        }
    }
}
